[IA64] setting rr0 is not correctly emulated
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Fri, 17 Mar 2006 20:44:48 +0000 (13:44 -0700)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Fri, 17 Mar 2006 20:44:48 +0000 (13:44 -0700)
When guest is not at metaphysical mode, VMM should
set machine rr0.

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
xen/arch/ia64/xen/regionreg.c

index 8718b931a1507058ff4317c4e796c8f5a807ad69..727376f76da4c91af34462e9fc7103483c77a8a7 100644 (file)
@@ -249,13 +249,18 @@ int set_one_rr(unsigned long rr, unsigned long val)
        newrrv.rid = newrid;
        newrrv.ve = 1;  // VHPT now enabled for region 7!!
        newrrv.ps = PAGE_SHIFT;
-       if (rreg == 0)
+
+       if (rreg == 0) {
                v->arch.metaphysical_saved_rr0 = vmMangleRID(newrrv.rrval);
-       else if (rreg == 7)
+               if (!PSCB(v,metaphysical_mode))
+                       set_rr(rr,newrrv.rrval);
+       } else if (rreg == 7) {
                ia64_new_rr7(vmMangleRID(newrrv.rrval),v->vcpu_info,
                             v->arch.privregs, __get_cpu_var(vhpt_paddr),
                             (unsigned long) pal_vaddr);
-       else set_rr(rr,newrrv.rrval);
+       } else {
+               set_rr(rr,newrrv.rrval);
+       }
 #endif
        return 1;
 }